'use strict';	//严格模式
// 学生管理的控制器文件：增删改查 等操作

const xtpl = require('xtpl');	// 模板引擎
const path = require('path');
const moment = require('moment');	// 转换时间格式的模块
const fs = require('fs');

const db = require('../configs/database.js');

// 加载基础控制器
const baseCtr = require('./baseController.js');

// 学生添加页面
module.exports.studentAdd = function(req,res){
	// xtpl.renderFile('',{},function(){})
	// 先查询班级列表
	db.table('class').select().then(function(data){
		// console.log(data);
		//查询课程
		db.table('subject').select().then(function(subDate){
			// 显示视图
		xtpl.renderFile(
			path.join(__dirname,'../views/admin/student_add.html'),	// 加载视图文件
			{
				page:'stuAdd',	// 页面名称
				clsList:data,
				subList:subDate
			},  // 第2个参数（主要是用于传给视图的）
			function(err,content){
				// 设置输出的内容类型 html
				res.setHeader('Content-Type','text/html;charset=utf-8');
				res.send(content);
			}
		)
		})

		
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

// 学生添加操作
module.exports.studentAddData = function(req,res){
	// 测试
	// console.log(req.body.stu_name)
	// 添加学生的逻辑：要先检查是否已录入，没有才可以添加
	console.log(req.body.sub);
	
	var where = `stu_name='${req.body.stu_name}' or stu_phone='${req.body.stu_phone}'`;
	db.table('student').field('stu_id').where(where).find().then(function(result){
		if(JSON.stringify(result)=='{}'){
			// 接下来这里做添加
			// console.log(req.files.stu_img);
			var data = {
				stu_name:req.body.stu_name,
				stu_age:req.body.stu_age,
				stu_sex:req.body.stu_sex,
				stu_phone:req.body.stu_phone,
				stu_time:Date.parse(req.body.stu_time)/1000,
				class_id:req.body.class_id,
				stu_img:path.basename(req.files.stu_img.path)	// 只获取名称，不包括路径
			}
			// console.log(data)
			db.table('student').add(data).then(function(stu_id){	
				//将添加条件转出数组
				var addAll = [];
				for(var i=0; i<=req.body.sub.length-1; i++){
					addAll.push({stu_id:stu_id,sub_id:req.body.sub[i]});
				}
				console.log(addAll);
				
				db.table('student_subject_data').addAll(addAll).then(function(){
					console.log('添加成功')
					// 跳转到列表页
					res.redirect('/admin/student/student_list');  // redirect 重定向，跳转
				}).catch(function(err){ console.log(err);
				})
			}).catch(function(err){})
		}else{
			baseCtr.sendMsg('该学生已存在',res);
		}

		// res.end();	// 结束程序，跳转不能加这个
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

// 学生列表
module.exports.studentList = function(req,res){
	var pn = req.query.pn!=undefined?req.query.pn:1;	// 这句可以接收网址 ...admin/student/student_list?pn=2，上面的参数pn的值
	// console.log(pn);	// 得到 2
	var limit = 2;	// 每页显示2条记录
	var start = (pn-1)*limit;
	var where =''
	//关键字搜索 讲条件设置为变量
	var s = req.query.ser!=undefined&&req.query.ser!=''?req.query.ser:''
	if(s!=''){
		where = `stu_name like '%${s}%' or stu_phone like '%${s}%'`
	}

	// select * from student left join class on student.class_id=class.class_id
	db.table('student').join({	// 链表查询
		table: 'class',
		join: 'left',
		on: ['class_id','class_id']
	}).where(where).limit(start,limit).select().then(function(data){

		
		// data.reverse();

		// 总记录的查询
		db.table('student').where(where).count('stu_id').then(function(total){	// total 总计
			
			var endPn = Math.ceil(total/limit);
			// 用数组存储页码  [1,2,3]
			var pageArr = [];
			for(var i=1; i<=endPn; i++){
				pageArr.push(i);
			}

			// 分页：（1）页码 （2）总记录数 （3）每页显示多少条记录（4）关联查询要加limit
			xtpl.renderFile(
				path.join(__dirname,'../views/admin/student_list.html'),
				{
					page:'stuList',	// 页面名称
					stuList:data,
					pageArr:pageArr,
					start:parseInt(start),
					pn:parseInt(pn),	// 是url的参数值，是字符串，要转成整型
					endPn: endPn,
					search:s
				},
				function(err,content){
					// 设置输出的内容类型 html
					res.setHeader('Content-Type','text/html;charset=utf-8');
					res.send(content);
				}
			)
		})
		
	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
	
}

// 学生删除
module.exports.studentDelete = function(req,res){
	var id = req.params.id;  // 这句可以接收网址 ...admin/student/student_delete/4
	// 接下来就是删除操作

	db.table('student_subject_data').where({stu_id:id}).delete().then(function(affectRows){
		// 删除成功，再删除学生表
		db.table('student').where({stu_id:id}).delete().then(function(affectRows){
			// 删除成功
			res.redirect('/admin/student/student_list');
		});
	});
}
// 多选删除
// {id: ['IN', '1, 2, 3']}
module.exports.studentDeleteAll = function(req,res){
	console.log(req.body.delStr) //不能接受到数组
	// 接下来就是删除操作
	db.table('student_subject_data').where({stu_id: ['IN', req.body.delStr]}).delete().then(function(affectRows){
		// 删除关系，再删除学生表
		db.table('student').where({stu_id: ['IN', req.body.delStr]}).delete().then(function(affectRows){
			// 删除成功
			res.redirect('/admin/student/student_list');
		});
	});
}
// 学生修改页面
module.exports.studentEdit = function(req,res){
	// xtpl.renderFile('',{},function(){})
	// 先查询班级列表
	db.table('class').select().then(function(clsData){
		
		db.table('student').where({stu_id:req.params.id}).find().then(function(stuData){
			db.table('subject').select().then(function(subData){
				
			db.table('student_subject_data').where({stu_id:req.params.id}).select().then(function(sub){
		
				var subArr =[]
				for(var i=0;i<sub.length;i++){
					subArr.push(sub[i].sub_id)
				}
				console.log(subArr);
				
			// 转换时间（记得时间戳是：毫秒）
			stuData.stu_time = moment(stuData.stu_time*1000).format('YYYY-MM-DD');
			// 显示视图
			xtpl.renderFile(
				path.join(__dirname,'../views/admin/student_edit.html'),	// 加载视图文件
				{
					page:'stuEdit',	// 页面名称
					clsList:clsData,
					stuData:stuData,
					subList:subData,
					sub:subArr,

				
				}, 
				function(err,content){
					// 设置输出的内容类型 html
					// console.log(err);
					
					res.setHeader('Content-Type','text/html;charset=utf-8');
					res.send(content);
				}
			)

			})
		})
		})

	}).catch(function(err){
		//err为具体的错误信息
		console.log(err)	// 命令行显示(方便调试)
	})
}

// 学生修改操作
module.exports.studentEditData = function(req,res){
	// 测试
	// console.log(req.body.stu_name)
	// 修改学生的逻辑：要先检查是否已录入，没有才可以修改
	var where = `stu_id!='${req.params.id}' and (stu_name='${req.body.stu_name}' or stu_phone='${req.body.stu_phone}')`;
	db.table('student').field('stu_id').where(where).find().then(function(result){
		if(JSON.stringify(result)=='{}'){
			// 接下来这里做修改
			var data = {
				stu_name:req.body.stu_name,
				stu_age:req.body.stu_age,
				stu_sex:req.body.stu_sex,
				stu_phone:req.body.stu_phone,
				stu_time:Date.parse(req.body.stu_time)/1000,
				class_id:req.body.class_id
			}	
			// 修改学生信息，关于学生头像的判断
			if(req.files.stu_img.size==0){
				// 没有选择文件，但是还是会上传一个文件，我们要删除他
				fs.unlink(req.files.stu_img.path,function(){});
			}else{
				// 有选择文件，我们会把文件名称保存到数据库
				data.stu_img = path.basename(req.files.stu_img.path)  // 只获取名称，不包括路径
			}
			db.table('student').where({stu_id:req.params.id}).update(data).then(function(){
				var editAll = [];
				for(var i=0; i<=req.body.sub.length-1; i++){
					editAll.push({stu_id:req.params.id,sub_id:req.body.sub[i]});
				}
				db.table('student_subject_data').where({stu_id:req.params.id}).delete().then(function(){
					db.table('student_subject_data').where({stu_id:req.params.id}).addAll(editAll).then(function(){
							console.log('修改成功')
						// 跳转到列表页
						res.redirect('/admin/student/student_list');  // redirect 重定向，跳转
					})
				})
			}).catch(function(err){})
		}else{
			baseCtr.sendMsg('该学生已存在',res);
		}
	}).catch(function(err){})
}
//学生搜索操作
module.exports.studentSearch = function(req,res){
	console.log(req.query);
	db.table('student').join({	// 链表查询
		table: 'class',
		join: 'left',
		on: ['class_id','class_id']
	}).where({stu_name:['LIKE','%'+req.query.ser+'%']}).select().then(function(data){

		console.log(data);
			
	}).catch(function(err){})


}




//学生状态操作
module.exports.studentState = function(req,res){

	console.log(req.params.state);
	

	db.table('student').where({stu_id:req.params.id}).update({stu_state:req.params.state}).then(function(){
	
		res.redirect('/admin/student/student_list');
	})
}